package com.triadsystems.cashweb.modelo.negocio.servicos.impl;

import java.util.List;

import javax.inject.Named;

import com.icon.infra.modelo.negocio.excecoes.ConsultaInvalidaException;
import com.icon.infra.modelo.negocio.excecoes.ObjetoJaExistenteException;
import com.icon.infra.modelo.negocio.excecoes.ObjetoNaoEncontradoException;
import com.icon.infra.modelo.persistencia.dao.impl.DAOHibernateTemplate;
import com.triadsystems.cashweb.modelo.negocio.servicos.IFormaPagamentoServico;
import com.triadsystems.cashweb.modelo.persistencia.entidades.FormaPagamento;


@SuppressWarnings("unchecked")
@Named
public class FormaPagamentoServico extends DAOHibernateTemplate<FormaPagamento>
		implements IFormaPagamentoServico {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	public List<FormaPagamento> getFormaPagamento(FormaPagamento formaPagamento)
			throws ObjetoNaoEncontradoException, ConsultaInvalidaException {

		List<FormaPagamento> resultado;
		String stringHQL = "from FormaPagamento fp where fp.bandeira =:bandeira and fp.tipoPagamento =:tipoPagamento";

		Object[] valores = { formaPagamento.getBandeira(),
				formaPagamento.getTipoPagamento() };
		String[] params = { "bandeira", "tipoPagamento" };

		resultado = recuperarObjetosPorHQL(stringHQL, params, valores, false);

		return resultado;

	}

	public FormaPagamento salvarOuRecuperarObjeto(FormaPagamento formaPagamento) throws ObjetoJaExistenteException, Exception {

		List<FormaPagamento> resultado = getFormaPagamento(formaPagamento);
		if (resultado != null && !resultado.isEmpty()) {
			return resultado.iterator().next();
		} else {
			try {
				salvarObjeto(formaPagamento);
			} catch (ObjetoNaoEncontradoException e) {
				e.printStackTrace();
			}
			return salvarOuRecuperarObjeto(formaPagamento);
		}
	}
}
